<template>
  <div class="swiper" ref="swiper">
    <div class="swiper-wrapper">
      <div class="swiper-slide" v-for="banner in bannerList" :key="banner.id">
        <!-- 添加绑定属性 ：src  -->
        <img :src="banner.imgUrl" :alt="`banner${banner.id}`" />
      </div>
    </div>
    <!-- 如果需要分页器 -->
    <div class="swiper-pagination"></div>
    <!-- 如果需要导航按钮 -->
    <div class="swiper-button-prev"></div>
    <div class="swiper-button-next"></div>
  </div>
</template>

<script>
import Swiper from 'swiper/bundle'
import 'swiper/css/bundle'

export default {
  name: 'XCarousel',
  props: {
    bannerList: Array,
  },
  watch: {
    bannerList: {
      async handler(newVal) {
        // ListContainer组件复用的轮播，第一次会触发监视属性，但是没有数据，是一个空数组，
        // 轮播为空的时候就不用考虑new Swiper
        if (!newVal.length) return
        await this.$nextTick()
        new Swiper(this.$refs.swiper, {
          // 给元素设置ref属性，此属性只会对当前组件生效，组件复用的时候，ref就是给新的元素设置
          // this.$refs.swiper获取元素的真实DOM
          autoplay: true, // 自动轮播
          loop: true, // 无限轮播
          // 小圆点
          pagination: {
            el: '.swiper-pagination',
            clickable: true, // 可以点击跳转
          },
          // 左右箭头
          navigation: {
            nextEl: '.swiper-button-next',
            prevEl: '.swiper-button-prev',
          },
        })
      },

      // Carousel 组件展示就已经存在有轮播数据，数据后面也没有改变，不会触发watch属性,
      // watch里面的程序就不会执行，轮播图就不会生效
      // 设置immediate ：true  就是Carousel组件一展示，就触发watch
      immediate: true,
    },
  },
}
</script>

<style lang="less" scoped></style>
